package com.itheima.advance.anno.demo03;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 进行直接的测试使用
 */
public class Anno1Demo01 {

    public static void main(String[] args) throws Exception {

        /**
         * 1. 获取到使用类的Class对象
         * 2. 通过反射获取所有的方法对象
         * 3. 遍历方法对象数组，获取每一个方法对象，判断该方法上是否存在@Test
         * 4. 如果存在就通过反射的方法执行，如果没有就不执行
         */

        // 1. 获取到使用类的Class对象
        Class clazz = Class.forName("com.itheima.advance.anno.demo03.UseTest");

        // 通过反射去创建对象
        UseTest useTest = (UseTest) clazz.newInstance();

        // 2. 通过反射获取所有的方法对象
        Method[] methods = clazz.getDeclaredMethods();

        // 3. 遍历方法对象数组，获取每一个方法对象，
        for(Method method : methods) {

            // 判断该方法上是否存在@Test
            // public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass):
            // 判断这个方法对象上是否存在指定的注解，参数表示的就是指定的注解对应的Class类型
            if(method.isAnnotationPresent(Test.class)) {
                method.invoke(useTest) ;
            }

        }
    }

}
